FastAPI এবং Celery এর ইন্টিগ্রেশন

Web Development - ফাস্টএপিআই (FastAPI) - FastAPI এবং Celery এর Integration (Task Queue)
201

FastAPI এবং Celery এর ইন্টিগ্রেশন খুবই কার্যকরী যখন আপনি অ্যাসিঙ্ক্রোনাস টাস্ক পরিচালনা করতে চান, যেমন ব্যাকগ্রাউন্ডে বড় বা সময়সাপেক্ষ কাজগুলো (যেমন ইমেইল পাঠানো, ডাটা প্রসেসিং ইত্যাদি)। Celery একটি অ্যাসিঙ্ক্রোনাস টাস্ক কিউ সিস্টেম যা এই ধরনের কাজগুলো খুবই দ্রুত এবং কার্যকরভাবে পরিচালনা করতে সাহায্য করে।

এই টিউটোরিয়ালে, আমরা FastAPI এবং Celery এর ইন্টিগ্রেশন কিভাবে করবেন, তা বিস্তারিতভাবে দেখব।


Step 1: প্রয়োজনীয় প্যাকেজ ইনস্টল করা

প্রথমে, আপনাকে Celery এবং Redis (অথবা অন্য কিউ সিস্টেম) ইনস্টল করতে হবে। Redis হল একটি জনপ্রিয় কিউ সিস্টেম যা Celery এর সাথে ব্যবহার করা হয়।

pip install celery[redis]
pip install fastapi
pip install uvicorn

এখানে, celery[redis] দিয়ে আমরা Celery এবং Redis সাপোর্টেড প্যাকেজ ইনস্টল করছি।


Step 2: Celery কনফিগারেশন

Celery এর সাথে কনফিগারেশন করতে Celery ইনস্ট্যান্স তৈরি করতে হবে এবং কিউ হিসেবে Redis ব্যবহার করা হবে।

উদাহরণ: Celery কনফিগারেশন

# celery_worker.py

from celery import Celery

# Redis কনফিগারেশন
celery_app = Celery(
    'worker',
    broker='redis://localhost:6379/0',  # Redis কিউ সার্ভার URL
    backend='redis://localhost:6379/0', # Redis ব্যাকএন্ড
)

# টাস্ক ডিফাইন করা
@celery_app.task
def add_numbers(a, b):
    return a + b

এখানে, celery_app হল আমাদের Celery অ্যাপ্লিকেশন যা Redis কিউ সার্ভার ব্যবহার করবে। add_numbers হল একটি সাধারণ টাস্ক যা দুইটি সংখ্যার যোগফল বের করে।


Step 3: FastAPI অ্যাপ তৈরি করা

এখন, আমরা FastAPI অ্যাপ তৈরি করব যা Celery টাস্কগুলোকে কল করবে।

উদাহরণ: FastAPI অ্যাপ

from fastapi import FastAPI
from celery_worker import add_numbers  # Celery টাস্ক আমদানি করা

app = FastAPI()

@app.get("/")
async def read_root():
    return {"message": "FastAPI and Celery Integration"}

@app.get("/add/{a}/{b}")
async def add(a: int, b: int):
    # Celery টাস্ক কল করা
    task = add_numbers.apply_async(args=[a, b])
    return {"task_id": task.id, "status": task.status}

এখানে:

  • /add/{a}/{b} রাউটে দুইটি ইনপুট সংখ্যা পাঠানো হচ্ছে।
  • add_numbers.apply_async() ব্যবহার করে Celery টাস্ক a এবং b সংখ্যার যোগফল বের করার জন্য ব্যাকগ্রাউন্ডে চালানো হবে।

Step 4: Celery Worker চালানো

এখন, আপনাকে Celery Worker চালাতে হবে যেটি Redis কিউ থেকে টাস্ক গ্রহণ করবে এবং সেগুলো প্রসেস করবে।

celery -A celery_worker.celery_app worker --loglevel=info

এখানে, celery_worker.celery_app হল Celery অ্যাপের পাথ এবং worker হচ্ছে Celery Worker, যা Redis কিউ থেকে টাস্ক গ্রহণ করবে এবং একে একে সেগুলো সম্পন্ন করবে।


Step 5: FastAPI অ্যাপ চালানো

এখন FastAPI অ্যাপ চালানোর জন্য uvicorn ব্যবহার করুন।

uvicorn main:app --reload

এখানে, main:app হল FastAPI অ্যাপের পাথ, এবং --reload ফ্ল্যাগ ডেভেলপমেন্ট পরিবেশে অটোমেটিক রিলোড করার জন্য ব্যবহৃত হয়।


Step 6: টাস্ক ফিল্ড চেক করা

এখন, আপনি যদি FastAPI এ /add/{a}/{b} এন্ডপয়েন্টে GET রিকোয়েস্ট পাঠান, তবে Celery টাস্ক চলে যাবে এবং একটি টাস্ক আইডি ফেরত পাওয়া যাবে।

উদাহরণ:

GET /add/5/10

রেসপন্স:

{
  "task_id": "some-task-id",
  "status": "PENDING"
}

Redis কিউয়ে Celery Worker টাস্কটি গ্রহণ করবে এবং সম্পন্ন করার পর স্ট্যাটাস আপডেট হবে।

রেসপন্স (টাস্ক সম্পন্ন হওয়ার পর):

{
  "task_id": "some-task-id",
  "status": "SUCCESS",
  "result": 15
}

Step 7: Celery টাস্কের ফলাফল চেক করা

আপনি যদি টাস্কের ফলাফল চেক করতে চান, তবে AsyncResult ব্যবহার করতে পারেন। যেমন:

from celery.result import AsyncResult

@app.get("/result/{task_id}")
async def get_result(task_id: str):
    task_result = AsyncResult(task_id)
    if task_result.state == "SUCCESS":
        return {"task_id": task_id, "result": task_result.result}
    return {"task_id": task_id, "status": task_result.state}

এখানে AsyncResult টাস্কের স্ট্যাটাস এবং ফলাফল জানতে ব্যবহৃত হবে।


Step 8: টাস্ক ফ্লেভার কনফিগারেশন এবং অপটিমাইজেশন

Celery টাস্কে কাস্টম টাইমআউট:

Celery টাস্কের জন্য আপনি টাইমআউট কনফিগার করতে পারেন, যাতে কোনো টাস্ক অত্যধিক সময় নিলে তা বন্ধ হয়ে যায়।

celery_app.conf.update(
    task_time_limit=300,  # টাস্কের জন্য সর্বোচ্চ সময় (৫ মিনিট)
)

Celery-তে ব্যাকগ্রাউন্ড টাস্ক

FastAPI এবং Celery-তে ব্যাকগ্রাউন্ড টাস্কগুলি চালানোর জন্য apply_async() ব্যবহার করা হয়, যা টাস্ককে অবিলম্বে অথবা নির্দিষ্ট সময় পর চালানোর জন্য ব্যবহৃত হয়।


FastAPI এবং Celery এর ইন্টিগ্রেশন দিয়ে আপনি আপনার অ্যাপ্লিকেশনকে asynchronous এবং scalable করতে পারেন। এই ইন্টিগ্রেশন ব্যাকগ্রাউন্ড টাস্ক ম্যানেজমেন্টের জন্য খুবই উপকারী, বিশেষত যখন আপনাকে বড় কাজগুলো (যেমন ইমেইল পাঠানো, ডাটা প্রসেসিং) অ্যাসিঙ্ক্রোনাসভাবে করতে হয়। Celery এর মাধ্যমে আপনি আপনার অ্যাপের কার্যক্ষমতা ও প্রতিক্রিয়া সময়কে উন্নত করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...